import argparse
from tkinter.messagebox import NO

def get_basic_parser_for_train() -> argparse.ArgumentParser:
        """
        return basic arg parser
        """
        parser = argparse.ArgumentParser(description="Training")
        # set GPU
        parser.add_argument('--device_ids', type=str, help="GUP ids")
        parser.add_argument('--save_path', type=str, default='./model.pt')
        parser.add_argument('--dataset_path', type=str)
        parser.add_argument('--predict_path', type=str, default='./output.json')
        parser.add_argument('--dev_path', type=str, default=None)
        parser.add_argument('--log_path', type=str, default=None)
        parser.add_argument('--dist_emb_size', type=int)
        parser.add_argument('--type_emb_size', type=int)
        parser.add_argument('--lstm_hid_size', type=int)
        parser.add_argument('--conv_hid_size', type=int)
        parser.add_argument('--workers', type=int,default=1)
        parser.add_argument('--bert_hid_size', type=int)
        parser.add_argument('--ffnn_hid_size', type=int)
        parser.add_argument('--biaffine_size', type=int)
        parser.add_argument('--dilation', nargs='+', type=int)

        parser.add_argument('--emb_dropout', type=float)
        parser.add_argument('--conv_dropout', type=float)
        parser.add_argument('--out_dropout', type=float)

        parser.add_argument('--epochs', type=int)
        parser.add_argument('--batch_size', type=int)

        parser.add_argument('--clip_grad_norm', type=float)
        parser.add_argument('--learning_rate', type=float)
        parser.add_argument('--weight_decay', type=float)

        parser.add_argument('--bert_name', type=str)
        parser.add_argument('--bert_learning_rate', type=float)
        parser.add_argument('--warm_factor', type=float)
        parser.add_argument('--use_bert_last_4_layers', default=False, action='store_true')
        parser.add_argument('--seed', type=int)
        return parser

def get_basic_parser_for_inference() -> argparse.ArgumentParser:
        parser = argparse.ArgumentParser(description="Inference")
        parser.add_argument('--save_path', type=str, default='./model.pt')
        parser.add_argument('--dataset_path', type=str)
        parser.add_argument('--test_dir', type=str)
        parser.add_argument('--predict_path', type=str, default='./output.json')
        parser.add_argument('--output_path', type=str, default=None)
        parser.add_argument('--dev_path', type=str, default=None)
        parser.add_argument('--log_path', type=str, default=None)
        parser.add_argument('--dist_emb_size', type=int)
        parser.add_argument('--type_emb_size', type=int)
        parser.add_argument('--lstm_hid_size', type=int)
        parser.add_argument('--conv_hid_size', type=int)
        parser.add_argument('--workers', type=int,default=1)
        parser.add_argument('--bert_hid_size', type=int)
        parser.add_argument('--ffnn_hid_size', type=int)
        parser.add_argument('--biaffine_size', type=int)
        parser.add_argument('--dilation', nargs='+', type=int)

        parser.add_argument('--emb_dropout', type=float)
        parser.add_argument('--conv_dropout', type=float)
        parser.add_argument('--out_dropout', type=float)

        parser.add_argument('--epochs', type=int)
        parser.add_argument('--batch_size', type=int)

        parser.add_argument('--clip_grad_norm', type=float)
        parser.add_argument('--learning_rate', type=float)
        parser.add_argument('--weight_decay', type=float)

        parser.add_argument('--bert_name', type=str)
        parser.add_argument('--bert_learning_rate', type=float)
        parser.add_argument('--warm_factor', type=float)
        parser.add_argument('--use_bert_last_4_layers', default=False, action='store_true')
        parser.add_argument('--seed', type=int)
        return parser